home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / make / icmake-6.000 / icmake-6 / icmake / comp / optintst.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-08  |  1.3 KB  |  49 lines

  1. /*
  2.                              O P T I N T S T . C
  3.  
  4. */
  5.  
  6. #include "iccomp.h"
  7.  
  8. ESTRUC_ *optint_string(type, larg, rarg)
  9.     E_TYPE_
  10.         type;
  11.     ESTRUC_
  12.         *larg,
  13.         *rarg;
  14. {
  15.     etoc(larg);                             /* argument to stack */
  16.  
  17.     if
  18.     (
  19.         test_type(larg, e_str)              /* left is string */
  20.         &&
  21.         !rarg->type                         /* right is zeroframe */
  22.     )                                       /* -> P_CHECK implied */
  23.     {
  24.         rarg->type = e_int | e_const;       /* indicate constant */
  25.         rarg->evalue = P_CHECK;             /* indicate P_CHECK  */
  26.         etoc(rarg);                         /* right arg now code */
  27.         catcode(larg, rarg);                /* catenate code */
  28.     }
  29.     else if
  30.     (
  31.         test_type(larg, e_int)              /* left is int: explicit check */
  32.         &&
  33.         test_type(rarg, e_str)              /* right must be string */
  34.     )
  35.     {
  36.         etoc(rarg);                         /* right arg to code */
  37.         catcode(rarg, larg);
  38.         larg = rarg;
  39.     }
  40.     else
  41.     {
  42.         semantic(type_conflict, funstring[type]);
  43.         discard (rarg);
  44.         return (larg);
  45.     }
  46.  
  47.     callrss(larg, type);                    /* call the function */
  48.     return (larg);
  49. }